# encoding: utf-8

module Reportes::GenerarReporte
  
  # ---------------------------------------- METODOS DEL MODULO ------------------------------------
    def self.get_params()
    end
 
    
    def self.basico(metodo,objeto, options ={})
        pdf = Prawn::Document.new(:page_size => "LETTER")
        pdf.instance_eval do

          titulo = options[:titulo].nil? ? "" : options[:titulo]
          tamanio_col = options[:columnas_size].nil? ? 50 : options[:columnas_size]  
          detalles = options[:detalles].nil? ? [] : options[:detalles]
               
          encabezado(pdf)
          text titulo, :align => :center, :style =>:bold
          move_down 20
          pdf.bounding_box([0, cursor - 5], :width => 550, :height => 500) do
              
              if metodo == "show"
                  encabezados = options[:encabezados].nil? ? objeto.keys : options[:encabezados]
                  plantilla_normal_show(objeto,encabezados, tamanio_col,:center)

                  unless detalles.empty?
                    encabezados_det = options[:encabezados_det].nil? ? options[:detalles].first.keys : options[:encabezados_det]
                    titulo_det = options[:titulo_det].nil? ? "Detalle" : options[:titulo_det]
                    plantilla_detalle(titulo_det,detalles,encabezados_det,tamanio_col,:left)
                  end
              elsif metodo == "index"
                  encabezados = options[:encabezados].nil? ? objeto.first.attributes.keys : options[:encabezados]
                  plantilla_normal_index(objeto,encabezados, tamanio_col,:left)
              end
              
          end
          pie_pagina(pdf) 
            render
        end      
    end
    
  
   # ------------------------------------------------------------------------------------------------------ 
    
end

# ---------------  METODOS TIPO PARTIALS -------------------------------------------------

# Plantilla basica para un catalogo con la tabla principal , para muchos registros  
def plantilla_normal_index(objetos,encabezados, tamanio_col,posicion)
    headerTabla(encabezados,tamanio_col,posicion)

    objetos.each do |objeto|
       tabla(objeto,tamanio_col,posicion)
    end
    
end

# Plantilla basica para un catalogo con la tabla principal , para un solo registro
def plantilla_normal_show(objeto,encabezados, tamanio_col,posicion)
      headerTabla(encabezados,tamanio_col,posicion)
      tabla(objeto,tamanio_col,posicion)
end

def plantilla_detalle(titulo,detalles,encabezados,tamanio_col,posicion)
    text titulo, :align => :center, :style =>:bold
    move_down 20
    headerTabla(encabezados,tamanio_col,posicion)
    detalles.each do |detalle|
      tabla(detalle,tamanio_col,posicion)
    end
end

def encabezado(instancia_pdf)
   instancia_pdf.repeat(:all) do
      width_image = 80
      height_image = 80
      instancia_pdf.image "#{Rails.root}/app/assets/images/image001.jpg", :width => width_image,:height=>height_image, :position => :left , :vposition => :top 
#      instancia_pdf.image "#{Rails.root}/app/assets/images/Logo-Codafyr.png", :width => 70,:height=>40, :position => :right , :vposition => :top 
#      text_box "Universidad Autónoma de  Chihuahua", :at => [140, 700], :size => 14, :style =>:bold
#      text_box "Coordinación de Deportes, Activación Física  y Recreación", :at => [120, 680], :size => 12
      #Linea horizontal
      stroke do
       horizontal_line 0,535, :at => 650
      end


    end
    
end

def pie_pagina(instancia_pdf)
     string = "Página <page> de <total>"
  
      options = { :at => [instancia_pdf.bounds.right - 150, 0],
      :width => 150,
      :align => :right,
      :start_count_at => 1
      }
      number_pages string, options

end


def headerTabla(campos,tamanio_col,posicion)
  campos.delete("id")
  campos.delete("created_at")
  campos.delete("updated_at")
  data =  [campos]
  table(data ,:position => posicion,
        :header => true,
        :cell_style => { :font => "Times-Roman", :font_style => :bold,:size => 12, :min_font_size => 12, :width => tamanio_col}  
  ) 
end

def tabla(campos,tamanio_col,posicion)
  excepciones = ["id","created_at","updated_at"]
  datos = Hash.new
  campos.each do |campo|
    unless excepciones.include?(campo[0]) 
       datos[campo[0]] = campo[1].to_s
    end
  end

  data = [datos.values]
         
  table(data ,:position => posicion, 
        :cell_style => { :font => "Times-Roman",:size => 10, :min_font_size => 10, :width => tamanio_col}  
  ) 
end
